From 9999ac12555b3ddc114b68391b4a9b2a9b105249 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timm=20B=C3=A4der?= Date: Sun, 11 Aug 2019 10:06:52 +0200 Subject: [PATCH] range: Avoid a divison by 0 Based on a patch by Blake Latchford Fixes #618 --- gtk/gtkrange.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c index 992826d327..b2c2ae5d1d 100644 --- a/gtk/gtkrange.c +++ b/gtk/gtkrange.c @@ -2024,7 +2024,7 @@ update_slider_position (GtkRange *range, gtk_widget_translate_coordinates (GTK_WIDGET (range), priv->trough_widget, mouse_x, mouse_y, &mouse_x, &mouse_y); - if (priv->zoom && + if (priv->zoom && gtk_widget_compute_bounds (priv->trough_widget, priv->trough_widget, &trough_bounds)) { zoom = MIN(1.0, (priv->orientation == GTK_ORIENTATION_VERTICAL ? @@ -2044,14 +2044,20 @@ update_slider_position (GtkRange *range, if (priv->slide_initial_slider_position == -1) { graphene_rect_t slider_bounds; + double zoom_divisor; if (!gtk_widget_compute_bounds (priv->slider_widget, GTK_WIDGET (range), &slider_bounds)) graphene_rect_init (&slider_bounds, 0, 0, 0, 0); + if (zoom == 1.0) + zoom_divisor = 1.0; + else + zoom_divisor = zoom - 1.0; + if (priv->orientation == GTK_ORIENTATION_VERTICAL) - priv->slide_initial_slider_position = (zoom * (mouse_y - priv->slide_initial_coordinate_delta) - slider_bounds.origin.y) / (zoom - 1.0); + priv->slide_initial_slider_position = (zoom * (mouse_y - priv->slide_initial_coordinate_delta) - slider_bounds.origin.y) / zoom_divisor; else - priv->slide_initial_slider_position = (zoom * (mouse_x - priv->slide_initial_coordinate_delta) - slider_bounds.origin.x) / (zoom - 1.0); + priv->slide_initial_slider_position = (zoom * (mouse_x - priv->slide_initial_coordinate_delta) - slider_bounds.origin.x) / zoom_divisor; } if (priv->orientation == GTK_ORIENTATION_VERTICAL) -- 2.30.2